package com.java.sjzl.controller;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.StyleSet;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;

import java.util.*;

public class HutoolExcel {
    public static void main(String[] args) {

        ArrayList<Map<String, Object>> rows = CollUtil.newArrayList(data());
        ExcelWriter writer = null;

        try {
            String path = "E://tmp//";

            String excelName = "Hutool" + System.currentTimeMillis() + ".xlsx";
            // 通过工具类创建writer,固定的文件输出路径
            writer = ExcelUtil.getWriter(path + excelName);
            System.out.println("文件路径："+path+excelName);

            // 定义第一行合并单元格样式
            CellStyle headCellStyle = writer.getHeadCellStyle();
            // 设置内容字体
            Font font = writer.createFont();
            // 字体加粗
            font.setBold(true);
            // 字体颜色
            font.setColor(Font.COLOR_RED);
            headCellStyle.setFont(font);

            // 设置第 0 列的单元格的宽度，列数从零开始计算
            writer.setColumnWidth(0, 20);
            writer.setColumnWidth(1, 20);
            writer.setColumnWidth(2, 20);

            // 定义数据行的样式
            StyleSet style = writer.getStyleSet();
            // 设置单元格文本内容自动换行
            style.setWrapText();

            // 合并单元格后的标题行（第一行），使用默认标题样式
            writer.merge(rows.get(0).size() - 1, "导出测试：TEST");
            // 一次性写出内容，使用默认样式，强制输出标题
            writer.write(rows, true);
            System.out.println("导出成功 ！！！");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                // 记住关闭 writer，释放内存
                writer.close();
            }
        }
    }


    /**
     * 构造 导出的数据
     *
     * @return
     */
    public static List<Map<String, Object>> data() {
        // 导出的数据
        ArrayList<Map<String, Object>> rows = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            Map<String, Object> row = new LinkedHashMap<>();

            row.put("字符串标题", "字符串" + i);
            row.put("日期标题", new Date());
            row.put("数字标题", 0.56);
            rows.add(row);
        }
        return rows;
    }
}
